package dao

import (
	"fmt"

	"github.com/astaxie/beego"
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
)

var DB *Database

type Database struct {
	Self *gorm.DB
}

func (d *Database) Init() {
	DB = &Database{
		Self: d.Open(),
	}
}

func (d *Database) Close() {
	DB.Self.Close()
}

func (d *Database) Open() *gorm.DB {
	username := beego.AppConfig.String("dbuser")
	password := beego.AppConfig.String("dbpwd")
	addr := beego.AppConfig.String("dbhost")
	name := beego.AppConfig.String("dbname")
	log, _ := beego.AppConfig.Bool("gormlog")

	// 建立mysql连接
	config := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8&parseTime=%t&loc=%s", username, password, addr, name, true, "Local")
	db, err := gorm.Open("mysql", config)
	if err != nil {
		panic(err)
	}
	db.LogMode(log)
	// 用于设置最大打开的连接数，默认值为0表示不限制.设置最大的连接数，可以避免并发太高导致连接mysql出现too many connections的错误。
	db.DB().SetMaxOpenConns(2000)
	// 用于设置闲置的连接数.设置闲置的连接数则当开启的一个连接使用完成后可以放在池里等候下一次使用。
	db.DB().SetMaxIdleConns(0)

	return db
}
